import { NextResponse } from 'next/server'
import bcrypt from 'bcryptjs'
import { getUserByUsername, getUserByEmail } from '@/lib/database'
import { logSecurityEvent } from '@/lib/rls-middleware'

/**
 * 用户登录 API
 * POST /api/auth/login
 */
export async function POST(request) {
    try {
        const body = await request.json()

        // 验证请求数据
        if (!body.username || !body.password) {
            return NextResponse.json({
                success: false,
                message: '用户名和密码不能为空'
            }, { status: 400 })
        }

        const { username, password } = body

        // 尝试通过用户名或邮箱查找用户
        let user = null

        // 判断输入的是邮箱还是用户名
        const isEmail = username.includes('@')

        if (isEmail) {
            user = await getUserByEmail(username, null) // 登录时不需要用户上下文
        } else {
            user = await getUserByUsername(username, null) // 登录时不需要用户上下文
        }

        if (!user) {
            return NextResponse.json({
                success: false,
                message: '用户名或密码错误'
            }, { status: 401 })
        }

        // 检查账户是否激活
        if (!user.is_active) {
            return NextResponse.json({
                success: false,
                message: '账户已被停用，请联系管理员'
            }, { status: 403 })
        }

        // 验证密码
        const isPasswordValid = await bcrypt.compare(password, user.password_hash)

        if (!isPasswordValid) {
            // 记录登录失败事件
            await logSecurityEvent(user.id, 'login_failed', 'users', user.id, false)

            return NextResponse.json({
                success: false,
                message: '用户名或密码错误'
            }, { status: 401 })
        }

        // 记录登录成功事件
        await logSecurityEvent(user.id, 'login_success', 'users', user.id, true)

        // 返回成功响应（不包含密码哈希）
        const { password_hash, ...userResponse } = user

        return NextResponse.json({
            success: true,
            message: '登录成功',
            user: userResponse
        }, { status: 200 })

    } catch (error) {
        console.error('Login error:', error)

        return NextResponse.json({
            success: false,
            message: '登录失败，请稍后重试'
        }, { status: 500 })
    }
}